﻿// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "HardReference.generated.h"

/**	C++ 中资源的硬引用
 * 		直接属性引用
 * 			引用资源的最简单方法是创建指针，并通过 UPROPERTY 宏公开。这样允许设计人员通过蓝图继承对原型指定特定资源，或通过放在环境中的实例来指定该资源
 * 		TSubclassOf 与 UClass
 * 			TSubclassOf 与 UClass 类似，但 TSubclassOf 是安全类型，同时具有筛选功能，
 * 		构造时引用
 * 			变量名必须是 static 类型，也可以使用 auto
 * 			以下三种只能在类的构造函数中使用，否则会crash
 * 				ConstructorHelpers::FObjectFinder<T>
 * 					一般用来加载非蓝图资源
 * 				ConstructorHelpers::FClassFinder<T>
 * 					一般用来加载蓝图资源并获取蓝图Class
 * 					蓝图文件路径_C，如 Blueprint'/Game/CPPFunction/Load/BP_MyActor.BP_MyActor_C'
 * 					蓝图文件去掉后缀，如 Blueprint'/Game/CPPFunction/Load/BP_MyActor'
 * 				FObjectFinder 和 FClassFinder构造函数都是调用LoadObject()
 **/


UCLASS()
class MISCELLANEOUSPROJECT_API AHardReference : public AActor
{
	GENERATED_BODY()

public:
	AHardReference();
	
	// 直接属性引用
	UPROPERTY(VisibleAnywhere)
	UStaticMeshComponent* body;
	UPROPERTY(VisibleAnywhere)
	class UPhysicsThrusterComponent* upThrusterComp;

	// TSubclassOf 与 UClass
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Class")
	UClass* ClassRef;
	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Class")
	TSubclassOf<AActor> ActorClassRef;

	
protected:
	virtual void BeginPlay() override;
};
